SPB Git

spb/autoscholar

Public
1.8 KB · 44 lines typescript
1import { getPaperBySlug } from "@autoscholar/core";2import { handler, json } from "@/lib/server/api";3import { db } from "@/lib/server/db";45export const runtime = "nodejs";67/** Public projection only: never serializes run/worker internals. */8export const GET = handler(async (_req, { params }) => {9  const { slug } = (await params) as { slug: string };10  const p = await getPaperBySlug(db(), slug);11  const v = p.version;12  const withdrawn = (v.metadata as { artifactsWithdrawn?: boolean }).artifactsWithdrawn === true;13  return json(14    {15      ...p.summary,16      metadata: {17        contributions: (v.metadata as Record<string, unknown>).contributions,18        methods: (v.metadata as Record<string, unknown>).methods,19        mainResults: (v.metadata as Record<string, unknown>).mainResults,20        limitations: (v.metadata as Record<string, unknown>).limitations,21        dataAvailability: (v.metadata as Record<string, unknown>).dataAvailability,22        codeAvailability: (v.metadata as Record<string, unknown>).codeAvailability,23      },24      artifacts: withdrawn ? [] : v.artifactSet,25      pdf: withdrawn ? null : v.pdfPublicPath,26      qaSummary: v.qaSummary,27      provenance: v.provenance,28      versions: p.versions.map((x) => ({29        versionNo: x.versionNo,30        publishedAt: x.publishedAt,31        changelog: x.changelog,32        pdf: withdrawn ? null : x.pdfPublicPath,33      })),34      corrections: p.corrections,35      retraction: p.retraction36        ? { notice: p.retraction.notice, retractedAt: p.retraction.retractedAt }37        : null,38      related: p.related,39      disclosure: "AI-generated working paper; not formally peer reviewed. Research computed on MacLustr.",40    },41    { headers: { "cache-control": "public, max-age=120, stale-while-revalidate=600" } },42  );43});44
Files · cf174810baa9fec822f36c2d1dff7efc3e0bec61
Menu

Theme